package com.kaifamiao.io.d0922;

import java.io.*;

public class FileCutter {

    /**
     * 将指定文件切割为不超过 size 大小的 N 份后，依次序放入到 directory 目录中
     * @param original 被拆分的原始文件
     * @param size  表示被拆分后的单个文件的最大体积
     * @param directory 表示将拆分后的多个文件放入到哪个目录中
     * @return 返回切割后的文件数目
     *
     * 1. 读取被拆分文件
     * 2. 判断每个小文件大小是否超过了 Integer.MAX_VALUE
     * 3. 创建 outputstream
     */
    public int split(final File original, final long size, final File directory) {
        int n = 0; // 表示拆分后文件个数的变量
        if (original.isFile()){
            if (!directory.exists()){
                directory.mkdirs();
            }
            try(FileInputStream fis = new FileInputStream(original);){
                byte[] bytes = new byte[(int)size];

                int len = -1;
                while( (len = fis.read(bytes)) != -1){
                    FileOutputStream fos = new FileOutputStream(new File(directory, n ++ + ".temp"));
                    fos.write(bytes, 0, len);
                    fos.close();
                }

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return n; // 返回拆分后的文件个数
    }

    public static void main(String[] args) {

//        FileCutter fc = new FileCutter();
//
//        File f = new File("D:/videos/20220725PM.mp4"); // 被拆分的文件
//
//        long size = 1024 * 1024 * 20; // 表示每个文件体积最大为20MB
//
//        File dir = new File("D:/io/video"); // 拆分后的小文件的存放目录
//
//        // 将 f 对应的文件拆分成 N 份，每一份大小 至多 20MB，并将拆分后的文件依次序放入到 dir 对应的目录中
//        int count = fc.split(f, size, dir);
//        System.out.println("共拆分了 " + count + " 个文件");
//        File file = new File("d:\\io");
//        System.out.println(file.exists());
//        System.out.println(file.isFile());
//        System.out.println(file.isDirectory());
//        System.out.println(file.length());

    }

}
